'''
Created on 26/04/2013

@author: mirta
'''
from app import db

from app.models.fase import Fase
from app.models.linea_base import LineaBase
from app.models.archivo import Archivo
from app.models.tipoItem import TipoItem

association_table = db.Table('item_archivo', db.Model.metadata,
    db.Column('item_id', db.Integer, db.ForeignKey('item.id')),
    db.Column('archivo_id', db.Integer, db.ForeignKey('archivo.id'))
)

class Item(db.Model):
    
    __tablename__ = 'item'
    id = db.Column(db.Integer, primary_key=True)
    nombre = db.Column(db.String(50))
    version = db.Column(db.String(50))   
    prioridad = db.Column(db.String(50))
    costo = db.Column(db.Integer)
    complejidad = db.Column(db.String(50))
    duracion = db.Column(db.String(50))
    estado = db.Column(db.String(50))
    descripcion = db.Column(db.String(120))
    observacion = db.Column(db.String(120))
    numero = db.Column(db.Integer)
    fecha_creacion = db.Column(db.Date)
    antecesor_id = db.Column(None, db.ForeignKey("item.id"), nullable=True)
    padre_id = db.Column(None, db.ForeignKey("item.id"), nullable=True)
    
    tipo_id = db.Column(None, db.ForeignKey("tipo_item.id"), nullable=True)
    tipo = db.relation(TipoItem, backref=db.backref('tipo'))    
   
    fase_id = db.Column(None, db.ForeignKey("fase.id"), nullable=True)
    fase = db.relation(Fase, backref=db.backref('items'))
    
    linea_base_id = db.Column(None, db.ForeignKey("linea_base.id"), nullable=True)
    linea_base = db.relation(LineaBase, backref=db.backref('linea_base'))

    archivos = db.relationship(Archivo,
                    secondary=association_table,
                    backref="item")
    
    __table_args__ = (db.UniqueConstraint('id','nombre', 'numero', 'fase_id', 'tipo_id', 'version', name='key_item'),
                     )

    def __init__(self, nombre='', version='',                 
                  prioridad='', costo=None, complejidad='',
                  duracion='', estado='', descripcion='', observacion='', numero=None,
                   fecha_creacion=None, fase=None, tipo = None,  antecesor_id=None, padre_id=None, linea_base=None):
        
        self.nombre = nombre
        self.version = version
        self.prioridad = prioridad
        self.costo = costo
        self.complejidad = complejidad
        self.duracion = duracion
        self.estado = estado
        self.descripcion = descripcion
        self.observacion = observacion
        self.numero = numero
        self.fecha_creacion = fecha_creacion
        self.fase = fase
        self.tipo = tipo
        self.antecesor_id = antecesor_id
        self.padre_id = padre_id       
        self.linea_base = linea_base
        
    def __repr__(self):
        return '<Item %r>' % (self.nombre)
    
    
    def setNombre(self, nombre):
        self.nombre = nombre
        
        
    def setAntecesor(self, antecesor_id):
        self.antecesor_id = antecesor_id
        
    
    def setPadre(self, padre_id):
        self.padre_id = padre_id
        
    
    def setEstado(self, estado):
        self.estado = estado
        
    
    def setVersion(self, version):
        self.version = version
        
    def add_archivo(self, archivo):
        if self.archivos is None:
            self.archivos = []
        self.archivos.append(archivo)